import axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosResponse, AxiosError, AxiosHeaders } from 'axios';

// 定义请求配置的泛型类型
type RequestConfig<T = unknown> = InternalAxiosRequestConfig<T>;

const instance: AxiosInstance = axios.create({
    baseURL: import.meta.env.VITE_API_URL, // 你的 API 地址
    timeout: 5000, // 请求超时时间（毫秒）
    headers: {
        'Content-Type': 'application/json', // 设置请求头，根据实际情况修改
    }
});

// 请求拦截器
instance.interceptors.request.use(
    (config: RequestConfig): RequestConfig => {
        // 在发送请求之前做些什么，比如添加 token 等
        if (!config.headers) {
            config.headers = new AxiosHeaders(); // 使用 AxiosHeaders 初始化 headers
        }
        return config;
    },
    (error: AxiosError): Promise<never> => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 响应拦截器
instance.interceptors.response.use(
    (response: AxiosResponse): AxiosResponse["data"] => {
        // 对响应数据做点什么
        return response.data;
    },
    (error: AxiosError): Promise<never> => {
        // 对响应错误做点什么
        return Promise.reject(error);
    }
);

export default instance;